package br.com.dallasmotopecas.comum.agenda.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.dallasmotopecas.comum.agenda.vo.AgendaSolicitacaoAjudaVo;
import br.com.dallasmotopecas.util.exception.ConsultarObjetoException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.model.AbstractModel;

public class AgendaSolicitacaoAjudaModel extends AbstractModel
{
	public AgendaSolicitacaoAjudaModel(Connection connection)
	{
		super(connection);
	}
	
	public void inserirSolicitacaoAjuda(final AgendaSolicitacaoAjudaVo agendaSolicitacaoAjudaVo) throws InserirObjetoException
	{
		PreparedStatement ps = null;
		StringBuffer sb = null;
		try
		{
			sb = new StringBuffer();
			sb.append(" insert into core.core_agenda_solicita_ajuda ");
			sb.append(" (                                           ");
			sb.append(" 	  data_solicitacao                      ");
			sb.append(" 	, core_usuario_solicitante              ");
			sb.append(" 	, core_usuario_solicitado               ");
			sb.append(" 	, core_cliente                          ");
			sb.append(" 	, descricao_solitacao                   ");
			sb.append(" )                                           ");
			sb.append(" values                                      ");
			sb.append(" (                                           ");
			sb.append(" 	  ?                                     ");
			sb.append(" 	, ?                                     ");
			sb.append(" 	, ?                                     ");
			sb.append(" 	, ?                                     ");
			sb.append(" 	, ?                                     ");
			sb.append(" );                                          ");
			
			ps = getConnection().prepareStatement(sb.toString());
			ps.setDate(1, agendaSolicitacaoAjudaVo.getDataSolicitacao());
			ps.setLong(2, agendaSolicitacaoAjudaVo.getUsuarioSolicitante().getId());
			ps.setLong(3, agendaSolicitacaoAjudaVo.getUsuarioSolicitado().getId());
			ps.setLong(4, agendaSolicitacaoAjudaVo.getClienteVo().getId());
			ps.setString(5, agendaSolicitacaoAjudaVo.getDescricaoSolicitacao());
			ps.executeUpdate();
		}
		catch(SQLException e)
		{
			throw new InserirObjetoException("Não foi Possível Inserir Solicitação de Ajuda", e);
		}
		finally
		{
			close(ps);
			sb = null;
		}
	}
	
	public void consultarSolicitacaoAjuda(final AgendaSolicitacaoAjudaVo agendaSolicitacaoAjudaVo) throws ConsultarObjetoException
	{
		PreparedStatement ps = null;
		ResultSet rs = null;
		StringBuffer sb = null;
		try
		{
			sb = new StringBuffer();
			sb.append("		select core.core_agenda_solicita_ajuda.id                                               ");
			sb.append("		     , core.core_agenda_solicita_ajuda.data_solicitacao                                 ");
			sb.append("			 , core.core_agenda_solicita_ajuda.core_usuario_solicitado                          ");
			sb.append("			 , usuario_solicitado.nome_completo                                                 ");
			sb.append("			 , core.core_agenda_solicita_ajuda.core_cliente                                     ");
			sb.append("			 , core.core_cliente.razao                                                          ");
			sb.append("			 , core.core_agenda_solicita_ajuda.descricao_solitacao                              ");
			sb.append("		  from core.core_agenda_solicita_ajuda                                                  ");
			sb.append(" inner join core.core_usuario usuario_solicitado                                             ");
			sb.append("         on usuario_solicitado.id = core.core_agenda_solicita_ajuda.core_usuario_solicitado  ");
			sb.append(" inner join core.core_cliente                                                                ");
			sb.append("         on core.core_cliente.id = core.core_agenda_solicita_ajuda.core_cliente              ");
			sb.append("      where core.core_agenda_solicita_ajuda.data_solicitacao          = ?                    ");
			sb.append("		   and core.core_agenda_solicita_ajuda.core_usuario_solicitante  = ?                    ");
			sb.append("	  	   and core.core_agenda_solicita_ajuda.core_usuario_solicitado   = ?                    ");
			sb.append("		   and core.core_agenda_solicita_ajuda.core_cliente              = ?                    ");
			
			ps = getConnection().prepareStatement(sb.toString());
			ps.setDate(1, agendaSolicitacaoAjudaVo.getDataSolicitacao());
			ps.setLong(2, agendaSolicitacaoAjudaVo.getUsuarioSolicitante().getId());
			ps.setLong(3, agendaSolicitacaoAjudaVo.getUsuarioSolicitado().getId());
			ps.setLong(4, agendaSolicitacaoAjudaVo.getClienteVo().getId());
			
			rs = ps.executeQuery();
			
			if (rs.next())
			{
				agendaSolicitacaoAjudaVo.setId(rs.getLong("id"));
				agendaSolicitacaoAjudaVo.setDataSolicitacao(rs.getDate("data_solicitacao"));
				agendaSolicitacaoAjudaVo.getUsuarioSolicitante().setId(rs.getLong("core_usuario_solicitado"));
				agendaSolicitacaoAjudaVo.getUsuarioSolicitado().setNomeCompleto(rs.getString("nome_completo"));
				agendaSolicitacaoAjudaVo.getClienteVo().setId(rs.getLong("core_cliente"));
				agendaSolicitacaoAjudaVo.getClienteVo().setRazao(rs.getString("razao"));
				agendaSolicitacaoAjudaVo.setDescricaoSolicitacao(rs.getString("descricao_solitacao"));
			}
		}
		catch(SQLException e)
		{
			throw new ConsultarObjetoException("Não foi Possível Consultar Solicitação de Ajuda", e);
		}
		finally
		{
			close(ps, rs);
			sb = null;
		}
	}

}
